package com.atomcorp.controlador;

import com.atomcorp.modelo.CatalogoDetalle;
import com.atomcorp.modelo.Choice;
import com.atomcorp.servicio.CatalogoDetalleServicio;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;

/**
 *
 * @author Harold
 */
public class ArbolCatDetController implements Initializable {

    @FXML
    TreeView<Choice> tvCatDetalle;
    CatalogoDetalleServicio catDetServicio;
    private ObservableList<CatalogoDetalle> listaCatalogosDetalles = FXCollections.observableArrayList();
    private int anioSeleccionado;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        catDetServicio = new CatalogoDetalleServicio();
    }

    public void obtenerListaCatDetalle(Long idCatalogo, int anio) {
        catDetServicio = new CatalogoDetalleServicio();
        listaCatalogosDetalles = catDetServicio.listarCatalogoDetalles(idCatalogo, anio);
        anioSeleccionado = anio;
        generarArbol();
    }

    public void generarArbol() {
        TreeItem<Choice> padres = new TreeItem<>(new Choice(null,"CATÁLOGO DETALLE - AÑO " + anioSeleccionado));
        TreeItem<Choice> hijo = null;
        TreeItem<Choice> nieto = null;
        for (CatalogoDetalle catDetalle : listaCatalogosDetalles) {
            hijo = new TreeItem<>(new Choice(catDetalle.getId(),catDetalle.getNombres()));
            ObservableList<CatalogoDetalle> lista = catDetServicio.obtenerHijos(catDetalle.getId());
            if (lista.size() > 0) {
                for (CatalogoDetalle catDetalle2 : lista) {
                    nieto = new TreeItem<>(new Choice(catDetalle2.getId(),catDetalle2.getNombres()));
                    ObservableList<CatalogoDetalle> lista2 = catDetServicio.obtenerHijos(catDetalle2.getId());
                    if (lista2.size() > 0) {
                        for (CatalogoDetalle catDetalle3 : lista2) {
                            nieto.getChildren().add(new TreeItem<>(new Choice(catDetalle3.getId(),catDetalle3.getNombres())));
                        }
                    }
                    hijo.getChildren().add(nieto);
                }
            }
            padres.getChildren().add(hijo);
            padres.setExpanded(true);
        }
        tvCatDetalle.setRoot(padres);
        tvCatDetalle.setShowRoot(true);
        tvCatDetalle.setEditable(true);
        tvCatDetalle.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    }
    
    public void seleccionarCatDetPadre(){
        Choice padreSeleccionado = tvCatDetalle.getSelectionModel().getSelectedItem().getValue();
        AdministrarCatDetController.getInstance().cerrarVentana(padreSeleccionado);
    }
}
